I. Field of the Invention
This invention relates generally to the field of computer systems. More specifically, the present invention relates to a method and system for implementing a modular scalability system.
II. Background Information
The amount of resources available to an application program executing on a computer system varies. For example, processor and memory resources vary widely by platform and environment. A common problem is how to achieve optimal behavior when resources vary, either statically (resources vary from one platform to another) or dynamically (resources vary on a platform depending on the resource needs of the applications executing). For adapting statically, if the user has a computer with a fast processor, he or she wants to use the processor to its full potential. Conversely, if the user has a computer with an older processor or a slower connection, he or she wants to handle new games, browsers, and applications to the best of its ability. For adapting dynamically, if a certain resource (such as a plug-n-play sound card; Plug and Play Industry Standard Architecture (ISA) Specification, Version 1.0a) is added to the computer system as the application is executing then the application should recognize this resource and take advantage of it.
Because of the varying processing powers of different devices, applications should be written such that they adapt to various environments. Applications running on environments with greater resources (e.g. processing power) should provide greater benefits (e.g. performance). An application that cannot adapt to its environment and provide greater benefits as more resources become available has several drawbacks including not fully using the computer""s capabilities, and requiring the developer to write many versions of the code in order to accommodate the different platforms on which it may execute.
Without any type of application program adaption capabilities, the application program is built for the slowest machine. Users on faster machines will not have an advantage over users on slower machines when applications are built this way. So as technology improves, the likelihood of users having a positive experience with these applications steadily decreases, forcing developers to rewrite these applications for the faster machines in order to take advantage of its rich resources such as a faster processor and other hardware that allows richer graphics, audio, etc.
Scalability allows an application program to execute at its maximum performance given the limited amount of resources available. Scalability accommodates all types of computer systems, from the system with weak capabilities to a system with great capabilities by maximizing system performance to the computing power and speed of a particular user""s equipment. Users with higher-end machines automatically get a better experience with scalability capability by taking direct advantage of higher quality graphics, video, and sound, as well as more sound, more video, and more graphics per application. However, a user on a slower machine can still run the same application and receive a level of performance that is as good as possible for the setup. This is invaluable to developers since multiple versions are not needed for scaling to occur; developers need only write one version of their software for all users. Further, scalability gives applications longer shelf life because latent features and increased functionality can emerge as digital technology advances.
In a video context, scalability provides the ability to vary the information content of a program by changing the amount of data that is stored, transmitted or displayed. In the case of digital video files, it is possible to compress those files, distribute them by compact disc or the Internet and then play those compressed files on the destination computer. Clips encoded are compressed to provide the very best quality and overall frame rate. However, without scalability, there is no flexibility in terms of frame quality and frame rate. There is no way to sacrifice frame quality for a higher data rate. Likewise, there is no way to playback the video at a different frame rate than the one it was encoded.
With regards to Internet video streaming applications, scalability allows the video to appear in real time. These applications have a potential problem because the bandwidth available for transferring data is constantly changing. When the bandwidth available on the network is large, the user can download data to his or her computer in real time. However, if more users access the Internet then the bandwidth available for transferring data decreases and the delay might cause the video to no longer appear real time. In this case, scalability is desirable in order to decrease the quality level but improve the data rate in order to again have the video appear in real time.
An important attribute would be to implement the scalability enabling code in a modular fashion. Modularity allows the scalability system to be application independent and thus be used by various scalable applications. Applications currently exist which are scalable, however, the scalability feature is built into these applications. For example, Intel""s Indeo(copyright) Video 4.4 program compresses video in a way that allows playback visual quality to vary automatically, based on the playback system""s available processing power. This scalability feature, however, is embedded into the Indeo(copyright) program and is not application independent but rather can only be used by this application.
An independent, stand-alone scalability system is needed in order to allow the application program to be scalable without having to write the scalability enabling code into each scalable application. Modularity reduces the amount of code that needs to be written and also the total amount of code required to enable scalability in an environment where multiple scalable applications are executing.
For the foregoing reasons, there is a need to have a scalable system program that is modular, configurable, dynamic, and can be easily used by an application with scalability capabilities.
This invention discloses a method and system for implementing a modular, application-independent scalability system whose system parameters are initialized by values provided from a scalable application program. The scalability system, for each of the system parameters, sets it to a default setting. That system updates the set of system parameters after a parameter change (e.g. a parameter is added or removed). The system also finds an optimum set of system parameters after a change in the amount of resources available or the system parameter change (e.g. a parameter is added or removed). The system also reports one or more of the optimum system parameters after a change in the amount of resources available or a system parameter change.